# Title     : TODO
# Objective : TODO
# Created by: Administrator
# Created on: 2019/6/18

myStartsWith <- function(str, prefix) {
  substring(str, 1, nchar(prefix)) == prefix
}

library(optparse)
library(ropls)
library(magrittr)
library(ggrepel)
library(tidyverse)

option_list <- list(
  make_option("--g", default = "SampleInfo.csv", type = "character", help = "sample group file"),
  make_option("--sc", default = "sample_color.txt", type = "character", help = "sample color file")
)
opt <- parse_args(OptionParser(option_list = option_list))

sampleInfo <- read.csv(opt$g, header = T, stringsAsFactors = F) %>%
  select(c("SampleID", "ClassNote"))

colorData <- read.csv(opt$sc, header = T, stringsAsFactors = F, comment.char = "") %>%
  select(c("ClassNote", "col"))

uniqueClassNote <- unique(sampleInfo$ClassNote)
for (i in 1:length(uniqueClassNote)) {
  classNote <- uniqueClassNote[i]
  color <- colorData %>%
    filter(ClassNote == classNote) %>%
    .$col %>%
    as.character()
  parameterData <- read_csv(str_c(classNote, "_PCA_R2.csv"))

  print(parameterData)

  plotData <- read_csv(str_c(classNote, "_PCA_Score.csv")) %>%
    rename(SampleID = X1) %>%
    left_join(sampleInfo, by = "SampleID")

  print(plotData)

  xBreaks <- seq(-20, 20, by = 10)

  fileName <- paste0(classNote, "_PCA_PC12_Scoreplot.pdf")

  impoPc1 <- parameterData[1, "PC1"]
  impoPc1 <- round(impoPc1 * 100, 2)
  impoPc2 <- parameterData[1, "PC2"]
  impoPc2 <- round(impoPc2 * 100, 2)

  p <- ggplot(plotData, mapping = aes(x = PC1, y = PC2, label = SampleID)) +
    xlab(paste("PC1(", impoPc1, "%)", sep = "")) +
    ylab(paste("PC2(", impoPc2, "%)", sep = "")) +
    theme_bw(base_size = 8.8, base_family = "Times") +
    theme(axis.text.x = element_text(size = 9, hjust = 1, vjust = 0.5),
          axis.text.y = element_text(size = 8.8), legend.position = 'top',
          axis.title.y = element_text(size = 11), legend.margin = margin(t = 0.3, b = 0.1, unit = 'cm'),
          legend.text = element_text(size = 8), axis.title.x = element_text(size = 11), panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
    ) +
    #0 line
    geom_vline(aes(xintercept = 0), colour = "#BEBEBE", linetype = "solid") +
    geom_hline(aes(yintercept = 0), colour = "#BEBEBE", linetype = "solid") +
    #point
    stat_ellipse(colour = "#BEBEBE", size = 0.3, level = 0.95, type = "norm") +
    geom_point(aes(colour = factor(ClassNote)), size = 4, stroke = 0) +
    geom_text_repel(segment.size = 0.2, color = color, size = 2, family = "Times") +
    #lengend
    scale_colour_manual("", values = c(color)) +
    scale_x_continuous(breaks = xBreaks)
  ggsave(limitsize = FALSE, fileName, p, width = 4.5, height = 4)
}




